# import xlrd, os
#
# # 打开excel
# # 方式一:绝对路径(不推荐)
# # readbook = xlrd.open_workbook(r"E:\code\framework_vip15\testData\data.xls")
# # 方式二: 相对路径
# path = os.path.dirname(os.path.dirname(__file__)) + "/testData/data.xls"
# print(path)
# readbook = xlrd.open_workbook(path)
# # 获取所有sheet页名字
# print(readbook.sheet_names())
# # 打开某个指定的sheet页
# sheet = readbook.sheet_by_index(0)
# # 获取这个sheet页的最大行/列
# max_row = sheet.nrows
# max_col = sheet.ncols
# print(f"最大行:{max_row},最大列:{max_col}")
# # 获取某个单元格的值
# print(sheet.cell_value(0, 0))
# # 获取某一行/列的值
# print(sheet.row_values(1))
# print(sheet.col_values(0))


"""
[[],[],[]]
[{},{},{}]

"""
# list1 = ["小明","小强"]
# list2 = [18,19]
# dict1 = {list1[i]:list2[i] for i in range(len(list1))}
# print(dict1)
# # zip函数实现
# res = zip(list1,list2)
# print(dict(res))


"""
定义一个类
1. 定义init初始化方法:
    1.1 获取文件路径
    1.2 打开并读取excel
    1.3 获取指定的sheet页
    1.4 获取最大行/列
    1.5 预设一个返回结果列表,默认为空
    1.6 获取第一行作为字典的key

2. 定义一个组装数据的对外方法: read_excel()
    循环读取每一行作为一条测试用例(第一行除外)
    2.1 获取每一行的数据(列表)
    2.2 将数据和表头组装成一个字典
    2.3 将组装好的字典放入结果列表内
    2.4 将组装好的返回列表返回给调用者

3. 定义一个组装数据的对外方法:read_json()
    3.1 获取文件路径
    3.2 打开json文件并读取
    3.3 将json文件转化为字典,并保存到变量内
    3.4 关闭json文件
    3.5 读取字典内所有的value转化为列表
    3.6 返回给外界使用
    
4. 定义一个组装数据的对外方法:read_yaml()   
    4.1 获取文件路径
    4.2 打开yaml文件
    4.3 读取文件内的数据
    4.4 关闭yaml文件
    4.5 返回组装好的数据给外界 
pip install PyYAML -i https://pypi.tuna.tsinghua.edu.cn/simple/
"""
import xlrd, os, json
import yaml


# 定义一个类
class ReadData:
    # 1. 定义init初始化方法:
    def __init__(self):
        # 1.1 获取文件路径
        self.path = os.path.dirname(os.path.dirname(__file__)) + "/testData/data.xls"
        self.json_path = os.path.dirname(os.path.dirname(__file__)) + "/testData/data.json"
        self.yaml_path = os.path.dirname(os.path.dirname(__file__)) + "/testData/data.yaml"
        # 1.2 打开并读取excel
        self.read_book = xlrd.open_workbook(self.path)
        # 1.3 获取指定的sheet页
        self.sheet = self.read_book.sheet_by_index(1)
        # 1.4 获取最大行/列
        self.max_row = self.sheet.nrows
        self.max_col = self.sheet.ncols
        # 1.5 预设一个返回结果列表,默认为空
        self.res_list = []
        # 1.6 获取第一行作为字典的key
        self.first_row = self.sheet.row_values(0)

    # 2. 定义一个组装数据的对外方法: read_excel()
    def read_excel(self):
        # 循环读取每一行作为一条测试用例(第一行除外)
        for i in range(1, self.max_row):
            # 2.1 获取每一行的数据(列表)
            row_value = self.sheet.row_values(i)
            # 2.2 将数据和表头组装成一个字典
            dict1 = dict(zip(self.first_row, row_value))
            # 2.3 将组装好的字典放入结果列表内
            self.res_list.append(dict1)
        # 2.4 将组装好的返回列表返回给调用者
        return self.res_list

    # 3. 定义一个组装数据的对外方法:read_json()
    def read_json(self):
        # 3.1 获取文件路径
        # 3.2 打开json文件并读取
        f = open(self.json_path)
        # 3.3 将json文件转化为字典,并保存到变量内
        testdata = json.load(f)
        # 3.4 关闭json文件
        f.close()
        # 3.5 读取字典内所有的value转化为列表
        data = list(testdata.values())
        # 3.6 返回给外界使用
        return data

    # 4. 定义一个组装数据的对外方法:read_yaml()
    def read_yaml(self):
        # 4.1 获取文件路径
        # 4.2 打开yaml文件
        f = open(self.yaml_path)
        # 4.3 读取文件内的数据
        data = yaml.load(f,Loader=yaml.FullLoader)
        # 4.4 关闭yaml文件
        f.close()
        # 4.5 返回组装好的数据给外界
        return data
if __name__ == '__main__':
    rd = ReadData()
    res = rd.read_excel()
    print(res)
    # print(rd.read_json())
    # print(rd.read_yaml())